A storage system typically comprises one or more storage devices into which information may be entered, and from which information may be obtained, as desired. The storage system includes a storage operating system that functionally organizes the system by, inter alia, invoking storage operations in support of a storage service implemented by the system. The storage system generally provides its storage service through the execution of software modules, such as processes. The storage system may be implemented in accordance with a variety of storage architectures including, but not limited to, a network-attached storage environment, a storage area network and a disk assembly directly attached to a client or host computer. The storage devices are typically disk drives organized as a disk array, wherein the term “disk” commonly describes a self-contained rotating magnetic media storage device. The term disk in this context is synonymous with hard disk drive (HDD) or direct access storage device (DASD).
The storage operating system of the storage system may implement a high-level module, such as a file system, to logically organize the information as a hierarchical structure of data containers, such as files and logical units stored on volumes. For example, each “on-disk” file may be implemented as set of data structures, i.e., disk blocks, configured to store information, such as the actual data for the file. These data blocks are organized within a volume block number (vbn) space that is maintained by the file system. The file system may also assign each data block in the file a corresponding “file offset” or file block number (fbn). The file system typically assigns sequences of fbns on a per-file basis, whereas vbns are assigned over a larger volume address space. The file system organizes the data blocks within the vbn space as a “logical volume”; each logical volume (hereinafter “volume”) may be, although is not necessarily, associated with its own file system.
The storage system may be further configured to operate according to a client/server model of information delivery to thereby allow many clients to access data containers stored on the system. In this model, the storage system may be embodied as a file server executing an operating system, such as the Microsoft® Windows™ operating system (hereinafter “Windows operating system”). Furthermore, the client may comprise an application, such as a database application, executing on a computer that “connects” to the storage system over a computer network, such as a point-to-point link, shared local area network (LAN), wide area network (WAN), or virtual private network (VPN) implemented over a public network such as the Internet. Each client may request the services of the storage system by issuing file-based and block-based protocol messages (in the form of packets) to the system over the network. By supporting a plurality of storage (e.g., file-based) access protocols, such as the conventional Common Internet File System (CIFS) and the Network File System (NFS) protocols, the utility of the server is enhanced.
A plurality of storage systems or nodes may be interconnected to provide a storage system environment, e.g., a storage system cluster, configured to service many clients. Each node may be configured to service one or more volumes of the cluster, wherein each volume comprises a collection of physical storage disks cooperating to define an overall logical arrangement of vbn space on the volume(s). The disks within a volume/file system are typically organized as one or more groups, wherein each group may be operated as a Redundant Array of Independent (or Inexpensive) Disks (RAID).
In such a clustered storage system environment, substantial processing resources are dedicated to performing network interface operations on multi-protocol information. The network interface operations consume resources of the cluster, such as processors, which must also perform user mode applications, administration and disk access functions for the nodes. This problem is exacerbated by the need for a node to identify and redirect network information and storage system requests that are bound for a different node in the cluster. Further, each node generally includes a system bus which becomes a bottleneck that slows processing of certain requests. This bottleneck can degrade performance, for example, if a request that is received at a first node of a cluster, but is ultimately destined for another node traverses the main bus of the first node to be handled by a processor prior to forwarding the request to the other node.